[VB6.0]英文系统中KeyPress事件里Chr函数的问题

来源:百度知道 编辑:UC知道 时间:2024/05/19 07:19:21
在简体中文系统中 Text 控件的 Keypress 里。如果用

Text1.Text = Chr(Keyascii)
Keyascii = 0

在输入中文时,可以正常的得到相应的中文。

但在英文系统中却会报错。用 ChrW 虽然不报错,但得到的字符却是一个问号。请问在英文系统中要如何修改才能用类似上面的方法来达到手工把输入的中文字加上去的目的。
网上找了很多资料了,但在英文系统里总是不行。问题的答案应该很简单,就是几行代码,但我试了好多方法都不行,所以才来问一下。而且网上容易找到的很多版本的文章我都看过了,还是没搞定,所以麻烦同志们不要在网上复制那些资料过来就以为可以拿到分了。谢谢。

文字编码的问题
Visual Basic 32-bit 版本的字串处理采用 Unicode,也就是说字串在 VB 内部是以

Unicode 的格式来存放。

何谓 Unicode?简单的说,就是每一个字元都是以 2-byte 的型式表示,而每个「实

体字元」就是一个「字元」。因此,

Len("大家好")

Len("abc")

所传回的值都是 3,因为「大」和「a」都是一个字元。

但是这对一些中文字串处理,例如纯文字的资料档,却是一个大灾难,因为你必须以

byte 来定位每个字元,可是 Unicode 却把一切的处理全搞砸了。例如:

Len("Good Morning") 传回 12,而

Len("今天天气很好") 传回 6

对初学者而言,好不容易能使用 VB 来写程式已经是件了不起的事了,却马上在中文

处理上挨了一记闷棍,所受到的打击实在不小。但是不要怕,事实上只要再多了解一

些指令,就可以把中文处理的问题解决了。

是什麽指令呢?最重要的莫过於 StrConv 了。StrConv 函式的语法为:

StrConv(待转换字串, 转换格式)

其中转换格式在这里用到的是:

vbUnicode 将 Ansi 字串转换为 Unicode

vbFromUnicode 将 Unicode 字串转换为 Ansi

将字串转成 Ansi 之后,所有的字串处理指令都要加个 B,例如:LeftB, RightB,

MidB, ChrB, InstrB, LenB, InputB 等。例用这些指令来处理就行了。

当你处理完毕之后,你可以再将它再转回 Unicode,这样就可以使用一般的字串处理

指令了。